home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / KEYWITCH / KW_S200.LZH / w29tail.s < prev   
Text File  |  1995-03-20  |  10KB  |  375 lines

  1.     .include    w01dos.mac
  2.     .include    w05reloc.mac
  3.     .include    w08id.mac
  4.     .include    w09mes.mac
  5.  
  6.     .text
  7.     .even
  8.  
  9. ********************************
  10. *16進数文字をバイナリに変換
  11. *<d0.b:'0'..'9'/'A'..'F'/'a'..'f'
  12. *>d0.w:0..15/エラー=-1
  13. chrhex::
  14.     sub.b    #'0',d0
  15.     blo    chrhex_err
  16.     cmp.b    #'9'-'0',d0
  17.     bls    chrhex_end
  18.     cmp.b    #'A'-'0',d0
  19.     blo    chrhex_err
  20.     subq.b    #'A'-('9'+1),d0
  21.     cmp.b    #'9'+1-'0'+'F'-'A',d0
  22.     bls    chrhex_end
  23.     cmp.b    #'9'+1-'0'+'a'-'A',d0
  24.     blo    chrhex_err
  25.     sub.b    #'a'-'A',d0
  26.     cmp.b    #'9'+1-'0'+'f'-'a',d0
  27.     bls    chrhex_end
  28. chrhex_err::
  29.     st.b    d0
  30. chrhex_end::
  31.     ext.w    d0
  32.     rts
  33.  
  34. ********************************
  35. *16進数2桁をバイナリに変換
  36. *<a0.l:文字列のアドレス
  37. *>d0.w:0..255/エラー=-1
  38. *>a0.l:エラーなし=文字列の次のアドレス/エラー=不定
  39. chrhex2::
  40.     move.b    (a0)+,d0        *上位
  41.     bsr    chrhex
  42.     bmi    chrhex2_end
  43.     lsl.w    #4,d0
  44.     move.w    d0,-(sp)
  45.     move.b    (a0)+,d0        *下位
  46.     bsr    chrhex
  47.     or.w    (sp)+,d0
  48. chrhex2_end::
  49.     rts
  50.  
  51. ********************************
  52. *ファイル名と行番号を付けてエラーメッセージを表示する
  53. *<d4.w:エラーメッセージの番号
  54. *<d5.w:エラーカウンタ
  55. *<d6.w:行番号
  56. *<a3.l:ファイル名のアドレス
  57. *>d5.w:エラーカウンタ(+1)
  58. *?d0/a0
  59. write_line_message::
  60.     addq.w    #1,d5            *エラーカウントアップ
  61.     move.w    d4,-(sp)
  62.     movea.l    a3,a0
  63.     bsr    write_string        *ファイル名
  64.     moveq.l    #M_COLON_SPACE,d4
  65.     bsr    write_message
  66.     move.w    d6,d0
  67.     bsr    write_number        *行番号
  68.     moveq.l    #M_COLON_SPACE,d4
  69.     bsr    write_message
  70.     move.w    (sp)+,d4        *メッセージの番号
  71.     bra    write_message
  72.  
  73. ********************************
  74. *数値を表示する
  75. *<d0.w:数値(>0,<32768)
  76. write_number::
  77.     movem.l    d0-d3/a0,-(sp)
  78.     move.l    #'   '*256,-(sp)
  79.     move.w    #'  ',-(sp)
  80.     movea.l    sp,a0
  81.     ext.l    d0
  82.     moveq.l    #0,d1
  83.     move.l    #10000,d2
  84.     moveq.l    #5-1,d3
  85. write_number_lop::
  86.     divu.w    d2,d0
  87.     or.w    d0,d1
  88.     beq    write_number_sup
  89.     add.b    #'0',d0
  90.     move.b    d0,(a0)
  91.     clr.w    d0
  92. write_number_sup::
  93.     addq.w    #1,a0
  94.     swap.w    d0
  95.     divu.w    #10,d2
  96.     dbra    d3,write_number_lop
  97.     move.l    sp,a0
  98.     bsr    write_string
  99.     addq.w    #6,sp
  100.     movem.l    (sp)+,d0-d3/a0
  101.     rts
  102.  
  103. ********************************
  104. *メッセージを表示する
  105. *<d4.w:メッセージの番号(<0)
  106. *?d0/a0
  107. write_message::
  108.     move.w    d4,d0
  109.     not.w    d0
  110.     add.w    d0,d0
  111.     move.w    m_table(pc,d0.w),d0
  112.     lea.l    m_table(pc,d0.w),a0
  113. ********************************
  114. *文字列を表示する
  115. *<a0.l:文字列のアドレス(ASCIIZ)
  116. *?d0/a0
  117. write_string::
  118.     move.l    a0,d0
  119. write_string_loop::
  120.     tst.b    (a0)+
  121.     bne    write_string_loop
  122.     subq.w    #1,a0
  123.     suba.l    d0,a0
  124.     movem.l    d0/a0,-(sp)
  125.     move.w    #1,-(sp)
  126.     DOS    _WRITE
  127.     lea.l    10(sp),sp
  128.     rts
  129.  
  130. ********************************
  131. *メッセージのテーブル
  132. m_table::
  133.     .dc.w    m_aborted_by_key-m_table
  134.     .dc.w    m_alart_rom_vector-m_table
  135.     .dc.w    m_allocation_error-m_table
  136.     .dc.w    m_already_exist-m_table
  137.     .dc.w    m_already_kept-m_table
  138.     .dc.w    m_ask_cannot_patch-m_table
  139.     .dc.w    m_ask_cannot_recur-m_table
  140.     .dc.w    m_ask_illegal_set-m_table
  141.     .dc.w    m_ask_not_found-m_table
  142.     .dc.w    m_ask_other_version-m_table
  143.     .dc.w    m_cannot_open-m_table
  144.     .dc.w    m_cannot_release-m_table
  145.     .dc.w    m_cannot_release_device-m_table
  146.     .dc.w    m_changed-m_table
  147.     .dc.w    m_colon_space-m_table
  148.     .dc.w    m_crlf-m_table
  149.     .dc.w    m_duplicate_name-m_table
  150.     .dc.w    m_duplicate_parameter-m_table
  151.     .dc.w    m_environment_error-m_table
  152.     .dc.w    m_file_read_error-m_table
  153.     .dc.w    m_illegal_backslash-m_table
  154.     .dc.w    m_illegal_caret-m_table
  155.     .dc.w    m_illegal_character-m_table
  156.     .dc.w    m_illegal_hz-m_table
  157.     .dc.w    m_illegal_key_code-m_table
  158.     .dc.w    m_illegal_dollar-m_table
  159.     .dc.w    m_illegal_meta_char-m_table
  160.     .dc.w    m_illegal_parameter-m_table
  161.     .dc.w    m_kept-m_table
  162.     .dc.w    m_memory_shortage-m_table
  163.     .dc.w    m_missing_parameter-m_table
  164.     .dc.w    m_missing_quote-m_table
  165.     .dc.w    m_not_kept-m_table
  166.     .dc.w    m_other_version-m_table
  167.     .dc.w    m_other_version2-m_table
  168.     .dc.w    m_released-m_table
  169.     .dc.w    m_rule_not_binded-m_table
  170.     .dc.w    m_syntax_error-m_table
  171.     .dc.w    m_target_not_binded-m_table
  172.     .dc.w    m_title-m_table
  173.     .dc.w    m_too_long_chars-m_table
  174.     .dc.w    m_too_long_file_name-m_table
  175.     .dc.w    m_too_many_assign-m_table
  176.     .dc.w    m_too_many_break-m_table
  177.     .dc.w    m_too_many_char-m_table
  178.     .dc.w    m_too_many_code-m_table
  179.     .dc.w    m_too_many_copy-m_table
  180.     .dc.w    m_too_many_den-m_table
  181.     .dc.w    m_too_many_int-m_table
  182.     .dc.w    m_too_many_lock-m_table
  183.     .dc.w    m_too_many_meta-m_table
  184.     .dc.w    m_too_many_names-m_table
  185.     .dc.w    m_too_many_parameters-m_table
  186.     .dc.w    m_too_many_prefix-m_table
  187.     .dc.w    m_too_many_programs-m_table
  188.     .dc.w    m_too_many_reset-m_table
  189.     .dc.w    m_too_many_sbreak-m_table
  190.     .dc.w    m_too_many_suffix-m_table
  191.     .dc.w    m_too_many_unlock-m_table
  192.     .dc.w    m_undefined_name-m_table
  193.     .dc.w    m_unknown_command-m_table
  194.     .dc.w    m_unknown_human-m_table
  195.     .dc.w    m_unknown_switch-m_table
  196.     .dc.w    m_unknown_patch_name-m_table
  197.     .dc.w    m_usage-m_table
  198.  
  199.     .data
  200.  
  201. ********************************
  202. *メッセージ
  203. m_aborted_by_key::
  204.     .dc.b    'かなキーが押されているので処理を中止します',13,10,0
  205. m_alart_rom_vector::
  206.     .dc.b    '警告: ベクタが ROM アドレスに変更されていました',13,10,0
  207. m_allocation_error::
  208.     .dc.b    'メモリが開放できません、速やかにリセットして下さい',13,10,0
  209. m_already_exist::
  210.     .dc.b    '既に組み込まれています',13,10,0
  211. m_already_kept::
  212.     .dc.b    '環境定義ファイルは変更できません',13,10,0
  213. m_ask_cannot_patch::
  214.     .dc.b    'ASK68K の常駐部分が純正と異なります、変更できません',13,10,0
  215. m_ask_cannot_recur::
  216.     .dc.b    'ASK68K の常駐部分が変化しています、解除できません',13,10,0
  217. m_ask_illegal_set::
  218.     .dc.b    'パッチネーム n-n と tsu-n は同時に指定できません',13,10,0
  219. m_ask_not_found::
  220.     .dc.b    'ASK68K が組み込まれていません',13,10,0
  221. m_ask_other_version::
  222.     .dc.b    'ASK68K のバージョンが 3.01/3.02 ではありません',13,10,0
  223. m_cannot_open::
  224.     .dc.b    ' が見つかりません',13,10,0
  225. m_cannot_release::
  226.     .dc.b    'ベクタが変更されています、解除できません',13,10,0
  227. m_cannot_release_device::
  228.     .dc.b    'デバイスドライバとして組み込まれています、解除できません',13,10,0
  229. m_changed::
  230.     .dc.b    '設定を変更しました',13,10,0
  231. m_colon_space::
  232.     .dc.b    ': ',0
  233. m_crlf::
  234.     .dc.b    13,10,0
  235. m_duplicate_name::
  236.     .dc.b    'キーネームが二重定義されています',13,10,0
  237. m_duplicate_parameter::
  238.     .dc.b    '引数に同じデータが複数指定されています',13,10,0
  239. m_environment_error::
  240.     .dc.b    '環境定義ファイルに間違いがあります',13,10,0
  241. m_file_read_error::
  242.     .dc.b    '読み込みエラー',13,10,0
  243. m_illegal_backslash::
  244.     .dc.b    '\ の次の文字が違います',13,10,0
  245. m_illegal_caret::
  246.     .dc.b    '^ の次の文字が違います',13,10,0
  247. m_illegal_character::
  248.     .dc.b    '使えない文字があります',13,10,0
  249. m_illegal_hz::
  250.     .dc.b    '周波数の指定が違います',13,10,0
  251. m_illegal_key_code::
  252.     .dc.b    'キーコードが違います',13,10,0
  253. m_illegal_dollar::
  254.     .dc.b    '$ の次の文字が違います',13,10,0
  255. m_illegal_meta_char::
  256.     .dc.b    'メタ文字の指定が違います',13,10,0
  257. m_illegal_parameter::
  258.     .dc.b    '引数が違います',13,10,0
  259. m_kept::
  260.     .dc.b    '常駐しました',13,10,0
  261. m_memory_shortage::
  262.     .dc.b    'メモリが不足しています',13,10,0
  263. m_missing_parameter::
  264.     .dc.b    '引数が足りません',13,10,0
  265. m_missing_quote::
  266.     .dc.b    '"…" が閉じていません',13,10,0
  267. m_not_kept::
  268.     .dc.b    '常駐していないか、常駐部分のバージョンが違います',13,10,0
  269. m_other_version::
  270.     .dc.b    '常駐部分のバージョンが違います、解除できません',13,10,0
  271. m_other_version2::
  272.     .dc.b    '常駐部分のバージョンが違います、設定を変更できません',13,10,0
  273. m_released::
  274.     .dc.b    '常駐を解除しました',13,10,0
  275. m_rule_not_binded::
  276.     .dc.b    '&rule が設定されていません',13,10,0
  277. m_syntax_error::
  278.     .dc.b    '文法が違います',13,10,0
  279. m_target_not_binded::
  280.     .dc.b    '&target が設定されていません',13,10,0
  281. m_title::
  282.     .dc.b    '鍵盤の魔法使い ~ ',PROGRAM,' version ',VERSION,13,10
  283.     .dc.b    '    Copyright 1994,1995 by M.Kamada',13,10,0
  284. m_too_long_chars::
  285.     .dc.b    '&char の引数が 32 文字を超えています',13,10,0
  286. m_too_long_file_name::
  287.     .dc.b    'ファイル名が長すぎます',13,10,0
  288. m_too_many_assign::
  289.     .dc.b    '&assign が多すぎます',13,10,0
  290. m_too_many_break::
  291.     .dc.b    '&break が多すぎます',13,10,0
  292. m_too_many_char::
  293.     .dc.b    '&char が多すぎます',13,10,0
  294. m_too_many_code::
  295.     .dc.b    '&code が多すぎます',13,10,0
  296. m_too_many_copy::
  297.     .dc.b    '© が多すぎます',13,10,0
  298. m_too_many_den::
  299.     .dc.b    '&den が多すぎます',13,10,0
  300. m_too_many_int::
  301.     .dc.b    '&int が多すぎます',13,10,0
  302. m_too_many_lock::
  303.     .dc.b    '&lock が多すぎます',13,10,0
  304. m_too_many_meta::
  305.     .dc.b    '&meta が多すぎます',13,10,0
  306. m_too_many_names::
  307.     .dc.b    '&name が多すぎます',13,10,0
  308. m_too_many_parameters::
  309.     .dc.b    '引数が多すぎます',13,10,0
  310. m_too_many_prefix::
  311.     .dc.b    '&prefix が多すぎます',13,10,0
  312. m_too_many_programs::
  313.     .dc.b    '&prog が多すぎます',13,10,0
  314. m_too_many_reset::
  315.     .dc.b    '&reset が多すぎます',13,10,0
  316. m_too_many_sbreak::
  317.     .dc.b    '&sbreak が多すぎます',13,10,0
  318. m_too_many_suffix::
  319.     .dc.b    '&suffix が多すぎます',13,10,0
  320. m_too_many_unlock::
  321.     .dc.b    '&unlock が多すぎます',13,10,0
  322. m_undefined_name::
  323.     .dc.b    'キーネームまたはファイル名が違います',13,10,0
  324. m_unknown_command::
  325.     .dc.b    'コマンドが違います',13,10,0
  326. m_unknown_human::
  327.     .dc.b    'このバージョンの OS ではスイッチ -p が使えません',13,10,0
  328. m_unknown_switch::
  329.     .dc.b    'スイッチが違います',13,10,0
  330. m_unknown_patch_name::
  331.     .dc.b    'パッチネームが違います',13,10,0
  332. m_usage::
  333.     .dc.b    13,10
  334.     .dc.b    '使用法: ',PROGRAM,' [-{'
  335.     .dc.b    'a'
  336. *    .dc.b    'b','c'
  337.     .dc.b    'd','e'
  338. *    .dc.b    'f'
  339.     .dc.b    'i','j','l','m','n','p','r','s','t'
  340. *    .dc.b    'v'
  341.     .dc.b    'x'
  342.     .dc.b    '}{0|1}…] [環境定義ファイル名 …]',13,10
  343.     .dc.b    13,10
  344.     .dc.b    '  -a',9,'ASK68K version 3.01/3.02 の不具合の修正と仕様の変更を行います',13,10
  345. *    .dc.b    '  -bN',9,'キーデータバッファを N キー分拡張します (0≦N≦256)',13,10
  346. *    .dc.b    '  -c',9,'キークリックを PCM で鳴らします (KWClick.pcm)',13,10
  347.     .dc.b    '  -d',9,'3キー以上のロールオーバーで発生するハード的な誤入力を抑制します',13,10
  348.     .dc.b    '  -e',9,'環境定義ファイルに従ってキー配置を変更します (KeyWitch.env)',13,10
  349. *    .dc.b    '  -f',9,'キーデータバッファフルを PCM で知らせます (KWFull.pcm)',13,10
  350.     .dc.b    '  -i',9,'キー入力禁止モードを使います',13,10
  351.     .dc.b    '  -j',9,'ジョイスティックの操作をキーボードでできるようにします',13,10
  352.     .dc.b    '  -l',9,'キーに付いている LED の入れ替えを有効にします',13,10
  353.     .dc.b    '  -m',9,'メタキーを使用します',13,10
  354.     .dc.b    '  -n',9,'特定のキーのリピートを禁止します',13,10
  355.     .dc.b    '  -p',9,'プログラム毎に異なるキー配置を使用します',13,10
  356.     .dc.b    '  -r',9,'機能および常駐を解除するか、初期状態から設定し直します',13,10
  357.     .dc.b    '  -s',9,'特定のキーを離したとき同時に押されていたキーのリピートを止めます',13,10
  358.     .dc.b    '  -t',9,'テレビコントロールに使う組み合わせのキー入力を有効にします',13,10
  359. *    .dc.b    '  -v',9,'現在の状態を表示します',13,10
  360.     .dc.b    '  -x',9,'スキャンコードの入れ替えを有効にします',13,10
  361.     .dc.b    13,10
  362.     .dc.b    '環境変数 KEYWITCH で、環境定義ファイルを検索するパスを指定できます',13,10
  363.     .dc.b    13,10
  364.     .dc.b    0
  365.     .even
  366.  
  367.     .bss
  368.     .even
  369.  
  370. *以降はbaseからの相対アドレスで届かない可能性がある
  371.  
  372. ********************************
  373. *プログラムおわり
  374. prog_tail::
  375.